#ifndef _KTV_POINT_H_
#define _KTV_POINT_H_

#include "ui_std_ex.h"

namespace UI
{

class UI_Point
{
public:
	UI_Point() : m_XPos(0), m_YPos(0) { }
	UI_Point(const int x, const int y) : m_XPos(x), m_YPos(y) { }
	UI_Point(const UI_Point& p) : m_XPos(p.m_XPos), m_YPos(p.m_YPos) { }
	UI_Point(const std::string str);
	virtual ~UI_Point() { }
	void SetX(const int x) { m_XPos = x; }
	void SetY(const int y) { m_YPos = y; }
	int XPos(void) const { return m_XPos; }
	int YPos(void) const { return m_YPos; }
	UI_Point operator+(const UI_Point& p) const;
	UI_Point operator-(const UI_Point& p) const;
	UI_Point operator=(const UI_Point& p);
	bool operator==(const UI_Point& p) const { return ((m_XPos == p.m_XPos) && (m_YPos == p.m_YPos)); }
	bool operator!=(const UI_Point& p) const { return ((m_XPos != p.m_XPos) || (m_YPos != p.m_YPos)); }
	bool leftof(const UI_Point& p) const { return (m_XPos < p.m_XPos); }
	bool rightof(const UI_Point& p) const { return (m_XPos > p.m_XPos); }
	bool above(const UI_Point& p) const { return (m_YPos < p.m_YPos); }
	bool below(const UI_Point& p) const { return (m_YPos > p.m_YPos); }
	std::string ToString(void) const { return stdex::itoa(m_XPos) + "," + stdex::itoa(m_YPos); }
protected:
	int m_XPos;
	int m_YPos;
};

}


#endif // _KTV_POINT_H_

